home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / sgigsc.h.z / sgigsc.h
C/C++ Source or Header  |  1992-04-03  |  25KB  |  810 lines

  1. #ifndef __SYS_SGIGSC_H__
  2. #define __SYS_SGIGSC_H__
  3. /**************************************************************************
  4.  *                                      *
  5.  *          Copyright (C) 1989, Silicon Graphics, Inc.          *
  6.  *                                      *
  7.  *  These coded instructions, statements, and computer programs  contain  *
  8.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  9.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  10.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  11.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  12.  *                                      *
  13.  **************************************************************************/
  14.  
  15. /*
  16.  *  sgigsc.h
  17.  *    - Constants and structure definitions for the Silicon Graphics graphics
  18.  *      system call.
  19.  *
  20.  *  $Revision: 3.89 $
  21.  */
  22.  
  23. /*
  24.  * Machine independent operations
  25.  */
  26. #define    SGWM_LOCK    1        /* lock graphics hardware */
  27. #define    SGWM_UNLOCK    2        /* unlock graphics hardware */
  28. #define    SGWM_SIO    3        /* steal sio channel */
  29. #define    SGWM_UNSIO    4        /* unsteal sio channel */
  30. #define    SGWM_WMRUNNING    5        /* query window manager existence */
  31. #define    SGWM_MEWM    6        /* declare process as window manager */
  32. #define    SGWM_LOSTGR    9        /* test for graphics capability */
  33. #define    SGWM_TIEMOUSE    10        /* tie mouse to cursor */
  34. #define    SGWM_UNTIEMOUSE    11        /* untie mouse from cursor */
  35. #define    SGWM_CONSOLE    12        /* switch unix console to stream dev */
  36. #define    SGWM_QMEM    13        /* map shared q */
  37. #define    SGWM_UNQMEM    14        /* unmap shared q */
  38. #define    SGWM_WMMODELOCK    15        /* WM lock/unlock mode change lock */
  39. #define    SGWM_INIT    16        /* mark process as graphics process */
  40.  
  41. /*
  42.  * Machine dependent operations
  43.  */
  44.  
  45. /* GT/GTX */
  46. #define    SG4D80_CMD_BASE        100
  47. #define    SG4D80_TAKECX        100    /* take a context away */
  48. #define    SG4D80_OLDGIVECX    101    /* give a context to somebody */
  49. #define    SG4D80_GIVECX        102    /* give a context to somebody */
  50. #define    SG4D80_RESET        104    /* reset the GM */
  51. #define    SG4D80_MAPALL        105    /* map all GM memory and FIFO */
  52. #define    SG4D80_GM_CMD        106    /* pass a command to the GM */
  53. #define    SG4D80_INIT        107    /* mark process as a graphics process */
  54. #define    SG4D80_WINADDR        108    /* get user addresses for a context */
  55. #define    SG4D80_GET_RVTYPE    110    /* get rv board type from gm/host shm */
  56. #define    SG4D80_ACT_CX        111    /* activate a context */
  57. #define    SG4D80_DEACT_CX        112    /* deactivate a context */
  58. #define    SG4D80_STORE_CX        113    /* unload a context */
  59. #define    SG4D80_FEEDBACK        114    /* start a feedback operation */
  60. #define    SG4D80_PICK        115    /* start pick/select mode */
  61. #define    SG4D80_ENDPICK        116    /* stop pick/select mode */
  62. #define    SG4D80_PROBE        117    /* probe for presence of hardware */
  63. #define    SG4D80_RELEASE_CX    118    /* give up current context */
  64. #define    SG4D100_PIXEL_DMA    119    /* do pixel dma */
  65. #define    SG4D100_MAPALL        120    /* map gm for diagnostics */
  66. #define    SG4D100_WINADDR        121    /* get user addresses for a context */
  67. #define    SG4D100_INIT    SG4D100_WINADDR
  68. #define    SG4D100_RECTWRITE    123    /* write a screen rectangle */
  69. #define    SG4D80_SWAPBUFFERS    124    /* swap display buffers (w/modelock) */
  70. #define    SG4D80_CHANGE_MODE    125    /* change display mode (w/modelock) */
  71. #define    SG4D80_DBL_BUFFER    126    /* set dbl buffer mode (w/modelock) */
  72. #define    SG4D80_MAP_MODE        127    /* set color map mode (w/modelock) */
  73. #define    SG4D80_SETMAP        128    /* set multimap map nbr (w/modelock) */
  74. #define    SG4D80_WIDCHECK        129    /* set imp wid chk mode (w/modelock) */
  75. #define SG4D100_RECTREAD    130    /* read a screen rectangle */
  76.  
  77. #define    SG4DSP_SWAPBUFFERS    131    /* swap display buffers (w/modelock) */
  78. #define    SG4DSP_CHANGE_MODE    132    /* change display mode (w/modelock) */
  79. #define    SG4DSP_INIT_CX        133    /* initialize a new context */
  80. #define    SG4DSP_COPY        134    /* copy in/out to memory */
  81. #define    SG4DSP_TEXBIND        135    /* load/select a texture map */
  82. #define    SG4DSP_TEXSTATE        136    /* load/store texture state */
  83. #define    SG4DSP_ACCUMBUFFER    137    /* declare use of accumulation buffer */
  84. #define    SG4DSP_MAPMEM        138    /* lock and map user memory */
  85.  
  86. #define    SG4D80_CMD_LIMIT    199
  87.  
  88. /* GR1 (ECLIPSE) */
  89. #define SGGR1_CMD_BASE        200
  90. #define SGGR1_PROBE        236
  91. #define SGGR1_DOWNLD        233
  92. #define SGGR1_CHECKRE        244
  93. #define SGGR1_PROMIO        234
  94. #define SGGR1_MAPALL        200
  95. #define SGGR1_GINIT        201
  96. #define SGGR1_RELEASE_CX    235
  97. #define SGGR1_XMAPMODELO    202
  98. #define SGGR1_XMAPMODEHI    203
  99. #define SGGR1_MAPCOLOR        204
  100. #define SGGR1_GETMCOLOR        223
  101. #define SGGR1_MAPAUXCOLOR    205
  102. #define SGGR1_SWAPBUFFERS    206
  103. #define SGGR1_SWAPINTERVAL    207
  104. #define SGGR1_BLINK        208
  105. #define SGGR1_CYCLEMAP        209
  106. #define SGGR1_GAMMARAMP        210
  107. #define SGGR1_SETCURSOR        211
  108. #define SGGR1_MAPCURSCOLOR    213
  109. #define SGGR1_CURSDISPLAY    212
  110. #define SGGR1_DISPLAYREG    214
  111. #define SGGR1_BLANKSCREEN    215
  112. #define SGGR1_SETMONITOR    216
  113. #define SGGR1_GETMONITOR    222
  114. #define SGGR1_DMA        225
  115. #define SGGR1_GETHWCONFIG    226
  116. #define SGGR1_PICK        219
  117. #define SGGR1_ENDPICK        220
  118. #define SGGR1_GSYNC        221
  119. #define SGGR1_CREATECX        232
  120. #define SGGR1_INITCX        243
  121. #define SGGR1_DESTROYCX        242
  122. #define SGGR1_GIVECX        227
  123. #define SGGR1_TAKECX        228
  124. #define SGGR1_ACT_CX        229
  125. #define SGGR1_DEACT_CX        230
  126. #define SGGR1_STORECX        237
  127. #define SGGR1_LOADCX        238
  128. #define SGGR1_LOADMODE        245
  129. #define SGGR1_WRITECX        239
  130. #define SGGR1_GETCURSOFF        289
  131. #define    SGGR1_CMD_LIMIT        299
  132. /*XXX Highest cmd so far = 245 */
  133.  
  134. /*XXX TEMPORARY: ECLIPSE TESTING */
  135. #define SGGR1_CURSOFFHACK    291
  136. #define SGGR1_POSCURSOR        296
  137. #define SGGR1_MODERD        297
  138. #define SGGR1_PROTECT_HQMMSB    298
  139.  
  140. /* Operations for CG2 board, valid on 4D/60, 4D/70 and 4D/70GT */
  141. #define SG4DCG2_CMD_BASE    400
  142. #define    SG4DCG2_READ_REG    400    /* read any CG2 register */
  143. #define    SG4DCG2_WRITE_REG    401    /* write any CG2 register */
  144. #define SG4DCG2_CMD_LIMIT    419
  145.  
  146. /* Operations for VMUX board, valid on 4D/20 */
  147. #define SG4DVMUX_CMD_BASE    420
  148. #define    SG4DVMUX_READ_REG    420    /* read any VMUX register */
  149. #define    SG4DVMUX_WRITE_REG    421    /* write any VMUX register */
  150. #define SG4DVMUX_CMD_LIMIT    439
  151.  
  152. /* 
  153.  * Operations for GR1_AUXSCRN design -- be extra careful and don't reuse
  154.  * until 1991, just in case.
  155.  */
  156. #define SGAUX_CMD_BASE        500
  157. #define SGAUX_ALLOCSCRN        500    /* allocate a screen */
  158. #define SGAUX_DEALLOCSCRN    501    /* deallocate a screen */
  159. #define SGAUX_SETOUTSCRN    502    /* set graphics output screen */
  160. /* XXX the following 2 are only needed until the window manager is changed to
  161.  * keep track of the currrent input focus screen */
  162. #define SGAUX_SETINSCRN        503    /* set graphics input (mouse tracking)
  163.                      * screen */
  164. #define SGAUX_GETINSCRN        505    /* return the graphics input (mouse 
  165.                      * tracking) screen */
  166. #define    SGAUX_GETNSCRNS        504    /* return number of graphics screens
  167.                      * associated with the current
  168.                      * display */
  169. #define SGAUX_CURSDISPLAY    SGGR1_CURSDISPLAY
  170. #define SGAUX_CMD_LIMIT        509
  171.  
  172.  
  173. /*
  174.  * Data structures for SGWM_QMEM operation.
  175.  * All the data structures described below are assumed to be aligned on
  176.  * a longword boundary.
  177.  */
  178.  
  179. /*
  180.  * This structure defines the argument for the SGWM_QMEM system call.
  181.  */
  182. struct    sgigsc_qmem {
  183.     char    *base;            /* base address of q memory */
  184.     long    entries;        /* number of q entries */
  185. };
  186.  
  187. /*
  188.  * This structure defines an entry in the q.  Each entry is defined to
  189.  * be 8 longwords in length, aligned on a longword boundary.
  190.  */
  191. struct    sgigsc_qentry {
  192.     struct {
  193.         long    seconds;
  194.         long    microseconds;
  195.     } timeStamp;            /* time of event; relative to boot */
  196.  
  197.     long    event;            /* unique event identifier */
  198.  
  199.     union {
  200.         long    value[5];        /* maximum data area */
  201.         unsigned char ascii;        /* ascii code */
  202.         long    pid;            /* process id */
  203.  
  204.         struct {
  205.             long    x;        /* mouse x coordinate */
  206.             long    y;        /* mouse y coordinate */
  207.             long    buttons;    /* mouse button data */
  208.         } mouse;
  209.  
  210.         struct {
  211.             dev_t    dev;        /* unix device */
  212.             unsigned char c;    /* character from sio device */
  213.         } sio;
  214.     } ev;                /* event value */
  215. };
  216.  
  217. /* If timeStamp.seconds is SGT_TIME_RELATIVE
  218. ** then timeStamp.microseconds lbolt.
  219. */
  220. #define SGT_TIME_RELATIVE 0xFFFFFFFF
  221.  
  222. /* definitions for bits in of ev.mouse.buttons */
  223. #define    SGE_MOUSE_RIGHTMOUSE    0x01
  224. #define    SGE_MOUSE_MIDDLEMOUSE    0x02
  225. #define    SGE_MOUSE_LEFTMOUSE    0x04
  226. #define    SGE_LPEN_BUTTON        0x01
  227.  
  228. /*
  229.  * This structure defines an actual q.  The first two fields are the index's
  230.  * for the q entry and remove points.  The final field is a variable length
  231.  * array containing the actual q entries.  The number of entries is defined
  232.  * when the SGWM_QMEM call is given, via the sgigsc_mem.entries field.
  233.  */
  234. struct    sgigsc_q {
  235.     long    qin;            /* index for next q enter */
  236.     long    qout;            /* index for next q remove */
  237.     struct sgigsc_qentry q[1];    /* actual q */
  238. };
  239.  
  240. #define SGWM_MINQSIZE    32        /* minimum queue size allowed */
  241.  
  242. /*
  243.  * Event identifiers (sgigsc_qentry.event).
  244.  */
  245. #define    SGE_PDEATH    1        /* graphics process death */
  246. #define    SGE_PBLOCK    2        /* graphics process blocked */
  247. #define    SGE_KB        3        /* keyboard data */
  248. #define    SGE_MOUSE    4        /* mouse data */
  249. #define    SGE_SIO        5        /* sio data */
  250. #define    SGE_LPEN    6        /* light pen data */
  251.  
  252. /*
  253.  * Definitions for structures passed as arguments to sgigsc.
  254.  */
  255. typedef struct sgigsc_4D80_gm_cmd {
  256.     int cmd;    /* command to be passed to the GM */
  257.     char *sendp;    /* pointer to data to send to GM */
  258.     int slen;    /* length in bytes of send data */
  259.     char *recvp;    /* pointer to buffer for receive response */
  260.     int rlen;    /* length in bytes of receive buffer */
  261. } sg_4D80_gm_cmd_t;
  262.  
  263. typedef struct sgigsc_4D80_mapall {
  264.     char    *dramp;        /* pointer to the DRAM */
  265.     char    *pipep;        /* pointer to the FIFO */
  266. } sg_4D80_mapall_t;
  267.  
  268. typedef struct sgigsc_4D80_winaddr {
  269.     char    *pipep;        /* pointer to the FIFO */
  270.     char    *feedp;        /* pointer to the feedback area */
  271. } sg_4D80_winaddr_t;
  272.  
  273. typedef struct sgigsc_4D100_mapall {
  274.     char    *trigp;        /* pointer to the graphics trigger */
  275.     char    *pipep;        /* pointer to the FIFO */
  276.     char    *tagp;        /* pointer to the tag SRAM */
  277.     char    *dramp;        /* pointer to the shared memory area */
  278. } sg_4D100_mapall_t;
  279.  
  280. typedef struct sgigsc_4D100_winaddr {
  281.     char    *pipep;        /* pointer to the FIFO */
  282.     char    *feedp;        /* pointer to the feedback area */
  283.     char    *trigp;        /* pointer to the graphics trigger */
  284. } sg_4D100_winaddr_t;
  285.  
  286. typedef struct sgigsc_4D80_givecx {    /* for SG4D80_GIVECX */
  287.     int    pid;            /* process to receive the context */
  288.     int    cx;            /* context number */
  289.     int    screen;            /* screen number */
  290. } sg_4D80_givecx_t;
  291.  
  292. typedef struct sgigsc_4D80_swapbuffers {    /* for SG4D80_SWAPBUFFERS */
  293.     int    bankselect;
  294.     int    displaybank;
  295.     unsigned long    *modeaddr;
  296.     unsigned long    modemask;
  297. } sg_4D80_swapbuffers_t;
  298.  
  299. typedef struct sgigsc_4D80_change_mode {    /* for SG4D80_CHANGE_MODE */
  300.     int    newmode;
  301.     int    epmode;
  302.     int    spmode;
  303.     unsigned long    *modeaddr;
  304.     unsigned long    modemask;
  305. } sg_4D80_change_mode_t;
  306.  
  307. typedef struct sgigsc_4D80_map_mode {        /* for SG4D80_MAP_MODE */
  308.     int    newmode;
  309.     unsigned long    *modeaddr;
  310.     unsigned long    modemask;
  311. } sg_4D80_map_mode_t;
  312.  
  313. typedef struct sgigsc_4D80_setmap {        /* for SG4D80_SETMAP */
  314.     int    mapnum;
  315.     unsigned long    *modeaddr;
  316.     unsigned long    modemask;
  317.     unsigned long    modeval;
  318. } sg_4D80_setmap_t;
  319.  
  320. typedef struct sgigsc_4D80_widcheck {        /* for SG4D80_WIDCHECK */
  321.     int    enable;
  322.     unsigned long    *widaddr;
  323.     short    *wshm_widaddr;
  324. } sg_4D80_widcheck_t;
  325.  
  326. typedef struct sgigsc_4D80_store_cx {    /* for SG4D80_STORE_CX */
  327.     int    cx;        /* context to be unloaded */
  328.     caddr_t    buffer;        /* user virtual address of unload buffer */
  329.     int    buflen;        /* length of unload buffer in bytes */
  330. } sg_4D80_store_cx_t;
  331.  
  332. typedef struct sgigsc_4D80_feedback {    /* for SG4D80_FEEDBACK */
  333.     int    pipeaddr;    /* pipe address to write */
  334.     int    pipedata;    /* data to be written */
  335.     caddr_t    buffer;        /* user virtual address of feedback buffer */
  336.     int    buflen;        /* length of feedback buffer in bytes */
  337.     int    overflow;    /* buffer overflow flag (set by sgigsc) */
  338. } sg_4D80_feedback_t;
  339.  
  340. typedef struct sgigsc_4D80_pick {    /* for SG4D80_PICK */
  341.     caddr_t    buffer;        /* user virtual address of feedback buffer */
  342.     int    buflen;        /* length of feedback buffer in bytes */
  343. } sg_4D80_pick_t;
  344.  
  345. typedef struct sgigsc_4D80_endpick {    /* for SG4D80_ENDPICK */
  346.     int    pipeaddr;    /* pipe address to write */
  347.     int    pipedata;    /* data to be written */
  348.     int    overflow;    /* buffer overflow flag (set by sgigsc) */
  349. } sg_4D80_endpick_t;
  350.  
  351. typedef struct sgigsc_4D100_pixel_dma {    /* for SG4D100_PIXEL_DMA */
  352.     int    optype;        /* 0 -> read, 1 -> write */
  353.     caddr_t    buffer;        /* user virtual address of buffer */
  354.     int    buflen;        /* length to transfer in bytes */
  355.     int    offset;        /* offset into pixel buffer in bytes */
  356. } sg_4D100_pixel_dma_t;
  357.  
  358. typedef struct sgigsc_4D100_rectwrite {    /* for SG4D100_RECTWRITE */
  359.     caddr_t    buffer;        /* user virtual address of buffer */
  360.     int    pixsize;    /* size in bytes of each pixel */
  361.     int    x;        /* x coord of lower left corner */
  362.     int    y;        /* y coord of lower left corner */
  363.     int    width;        /* width in pixels of rect before zoom */
  364.     int    height;        /* height in pixels of rect before zoom */
  365.     int    xzoom;        /* x zoom factor */
  366.     int    yzoom;        /* y zoom factor */
  367. } sg_4D100_rectwrite_t;
  368.  
  369. typedef struct sgigsc_4DSP_change_mode {    /* for SG4DSP_SWAPBUFFERS */
  370.     unsigned long    xmapmode;        /* and SG4DSP_CHANGE_MODE */
  371.     unsigned long    *modeaddr;
  372.     unsigned long    modeval;
  373. } sg_4DSP_change_mode_t;
  374.  
  375. typedef struct sgigsc_4DSP_init_cx {        /* for SG4DSP_INIT_CX */
  376.     int    cx;            /* context number */
  377.     int    screen;            /* screen number */
  378. } sg_4DSP_init_cx_t;
  379.  
  380. typedef struct sgigsc_4DSP_copy {    /* for SG4DSP_COPY */
  381.     caddr_t buffer;        /* user virtual address of buffer */
  382.     int    buflen;        /* length to transfer in bytes */
  383.     int    flag;        /* 0 = load, 1 = store to main memory */
  384.     int    cpcmd;        /* CP cmd */
  385.     int    cpdata[15];    /* actual CP data values */
  386.     int     cpdatalen;    /* number of CP data items */
  387. } sg_4DSP_copy_t;
  388.  
  389. typedef struct sgigsc_4DSP_texbind {    /* for SG4DSP_TEXBIND */
  390.     long    npixels;    /* number of pixels in texture map */
  391.     caddr_t vaddr;        /* user virtual address of texture map */
  392.     long    compress;    /* 1 if the map is in compress format  */
  393. } sg_4DSP_texbind_t;
  394.  
  395. typedef struct sgigsc_4DSP_texstate {    /* for SG4DSP_TEXSTATE */
  396.     int    cx;        /* context number */
  397.     int    buflen;        /* maximum buffer length */
  398.     caddr_t buffer;        /* user virtual address of buffer */
  399.     int    flag;        /* 0 = load, 1 = store to main memory */
  400. } sg_4DSP_texstate_t;
  401.  
  402. typedef struct sgigsc_4DSP_mapmem {    /* for SG4DSP_MAPMEM */
  403.     caddr_t buffer;        /* user virtual address of buffer */
  404.     int    buflen;        /* length to transfer in bytes */
  405.     int    flag;        /* 0 = unmap, 1 = map user memory */
  406. } sg_4DSP_mapmem_t;
  407.  
  408. /******************************************************************************
  409.  * GR1 (Eclipse) sgigsc() system call argument structures.
  410.  *****************************************************************************/
  411.  
  412. /*XXX TEMPORARY FOR ECLIPSE TESTING */
  413. typedef struct sggr1_moderd {
  414.     long xmap;
  415.     long *modes;
  416. } sggr1_moderd_t;
  417.  
  418. typedef struct sggr1_poscursor {
  419.     long x;
  420.     long y;
  421. } sggr1_poscursor_t;
  422.  
  423. typedef struct sggr1_cursoffhack {
  424.     long xoff;
  425.     long yoff;
  426. } sggr1_cursoffhack_t;
  427.  
  428.  
  429. /*
  430.  * XMAP2 operation argument structures
  431.  */
  432.  
  433. typedef struct sggr1_xmapmodelo {
  434.     unsigned char colmode;
  435.     unsigned char bufsel;
  436.     unsigned char overlay;
  437.     unsigned long *modeaddr;
  438.     unsigned long modemask;
  439. } sggr1_xmapmodelo_t;
  440.  
  441. typedef struct sggr1_xmapmodehi {
  442.     unsigned char underlay;
  443.     unsigned char multimap;
  444.     unsigned char mapsel;
  445.     unsigned long *modeaddr;
  446.     unsigned long modemask;
  447. } sggr1_xmapmodehi_t;
  448.  
  449. typedef struct sggr1_mapcolor {
  450.     short index;
  451. /*XXX shorts as in GL doc or chars? */
  452.     unsigned char red;
  453.     unsigned char green;
  454.     unsigned char blue;
  455. } sggr1_mapcolor_t;
  456.  
  457. typedef struct sggr1_getmcolor {
  458.     short index;
  459. /*XXX shorts as in GL doc or chars? */
  460.     unsigned char red;
  461.     unsigned char green;
  462.     unsigned char blue;
  463. } sggr1_getmcolor_t;
  464.  
  465. typedef struct sggr1_mapauxcolor {
  466.     short index;
  467. /*XXX shorts or chars? */
  468.     unsigned char red;
  469.     unsigned char green;
  470.     unsigned char blue;
  471. } sggr1_mapauxcolor_t;
  472.  
  473. typedef struct sggr1_swapinterval {
  474.     short frames;
  475. } sggr1_swapinterval_t;
  476.  
  477. typedef struct sggr1_blink {
  478.     short rate;
  479.     unsigned short index;
  480.     unsigned char red, green, blue;
  481. } sggr1_blink_t;
  482.  
  483. typedef struct sggr1_cyclemap {
  484.     short map;
  485.     short nextmap;
  486.     short duration;
  487. } sggr1_cyclemap_t;
  488.  
  489.  
  490. /*
  491.  * DAC operation argument structures
  492.  */
  493.  
  494. typedef struct sggr1_gammaramp {
  495. /*XXX shorts or chars? */
  496.     unsigned short *red;
  497.     unsigned short *green;
  498.     unsigned short *blue;
  499. } sggr1_gammaramp_t;
  500.  
  501.  
  502. /*
  503.  * Cursor operation argument structures
  504.  */
  505.  
  506. typedef struct sggr1_setcursor {
  507.     char type;
  508.     char xorigin;
  509.     char yorigin;
  510.     unsigned char *glyph;
  511. } sggr1_setcursor_t;
  512.  
  513. typedef struct sggr1_mapcurscolor {
  514.  
  515.     char index;        /* Eclipse has only 1 color entry but we may
  516.                    have more later */
  517. /*XXX shorts or chars? */
  518.     unsigned char red;
  519.     unsigned char green;
  520.     unsigned char blue;
  521. } sggr1_mapcurscolor_t;
  522.  
  523. typedef struct sggr1_cursdisplay {
  524.     char display;            /* boolean: on or off */
  525. } sggr1_cursdisplay_t;
  526.  
  527.  
  528. /*
  529.  * Display Register operation argument structures
  530.  */
  531.  
  532. typedef struct sggr1_displayreg {
  533.     char regnum;
  534.     unsigned char val;
  535. } sggr1_displayreg_t;
  536.  
  537. typedef struct sggr1_blankscreen {
  538.     char blankscreen;
  539. } sggr1_blankscreen_t;
  540.  
  541. typedef struct sggr1_setmonitor {
  542.     unsigned char monitortype;
  543.     unsigned char flag;
  544.     long xmaxscreen;
  545.     long ymaxscreen;
  546.     long xcursmagic;
  547.     long ycursmagic;
  548.     long topscan;
  549. } sggr1_setmonitor_t;
  550.  
  551. typedef struct sggr1_getmonitor {
  552.     unsigned char monitortype;
  553.     unsigned char flag;
  554. } sggr1_getmonitor_t;
  555.  
  556. /* Display control flags: */
  557. #define SGGR1_SYNCGRN    0x01        /* Composite sync on green */
  558. #define SGGR1_BLANK    0x02        /* Screen is currently off */
  559. #define SGGR1_STEREO    0x04        /* Stereo optic display enabled */
  560. #define SGGR1_EXTCLK    0x08        /* Timing locked to external clock
  561.                        (ie. in genlock mode) */
  562.  
  563. #define SGGR1_OVERRIDE_TOPSCAN 0x10    /* Use the topscan value supplied with
  564.                        struct sggr1_setmonitor instead of
  565.                        determining it from monitortype;
  566.                        never set by sggr1_getmonitor */
  567.  
  568. /*
  569.  * Graphics DMA argument structures
  570.  */
  571.  
  572. typedef struct sggr1_dma {
  573.     long token;            /* Token to send down pipe */
  574.     long x;                /* Rectangular coordinate in pixels */
  575.     long xlen;
  576.     long y;
  577.     long ylen;
  578.     char *buf;            /* Data buffer */
  579.     unsigned short flags;        /* Bit flags defined below */
  580.     char pixsize;            /* Pixel size (1, 2, 4 bytes) */
  581.     char pmoffset;            /* Number of bits of the first CPU
  582.                        word of each scanline that are
  583.                        to be ignored */
  584.     long pmstride;            /* Number of 32-bit CPU words per
  585.                        scanline */
  586. } sggr1_dma_t;
  587.  
  588. /* Flags for graphics DMA */
  589. #define GR1_READ    0x01        /* DMA direction: gfx to host */
  590. #define GR1_WRITE    0x02        /* DMA direction: host to gfx */
  591. #define GR1_LNBYLN    0x04        /* Line by line DMA: 1 line at a time */
  592. #define GR1_SINGLE    0x08        /* Single line DMA (special case) */
  593. #ifdef LATER    /* XXX */
  594. #define GR1_INTR    0x10        /* Ucode should interrupt when done */
  595. #endif 
  596. #define GR1_STRIDE    0x20        /* Stride DMA */
  597.  
  598.  
  599. /*
  600.  * Misc. operation argument structures
  601.  */
  602.  
  603. typedef struct sggr1_gethwconfig {
  604.     char bitplanes;
  605.     char zbuf;
  606.     char gsnr;        /* in value: screen that inquiry is for */
  607.     char _filler;
  608.     long invstate;        /* added because shared GL can't import hinv 
  609.                  * routines from libc */
  610. } sggr1_gethwconfig_t;
  611.  
  612. typedef struct sggr1_pick {    /* for SGGR1_PICK */
  613.     char *buffer;        /* user virtual address of feedback buffer */
  614.     long buflen;        /* length of feedback buffer in 32 bit words */
  615. } sggr1_pick_t;
  616.  
  617. typedef struct sggr1_endpick {    /* for SGGR1_ENDPICK */
  618.     long token;        /* token kernel sends to GE for GL */
  619.     long overflow;        /* buffer overflow flag (set by sgigsc) */
  620. } sggr1_endpick_t;
  621.  
  622.  
  623. /*
  624.  * Window Manager operation argument structures
  625.  */
  626.  
  627. typedef struct sggr1_initcx {    /* for SGGR1_INITCX */
  628.     long cxid;        /* New context to be initialized */
  629.     long wid;        /* Window ID of new context */
  630. } sggr1_initcx_t;
  631.  
  632. typedef struct sggr1_givecx {
  633.     long pid;        /* Process to receive the context */
  634.     long cx;        /* Context number */
  635.     long wid;        /* Window ID that context should use*/
  636. } sggr1_givecx_t;
  637.  
  638. typedef struct sggr1_storecx {    /* for SGGR1_STORECX */
  639.     long    cxid;        /* context to be unloaded */
  640.     char    *buf;        /* user virtual address of unload buffer */
  641.     long    buflen;        /* length of unload buffer in bytes */
  642. } sggr1_storecx_t;
  643.  
  644. typedef struct sggr1_loadcx {    /* for SGGR1_LOADCX */
  645.     long    cxid;        /* context to be loaded */
  646.     long    wid;        /* Window ID of context */
  647.     char    *buf;        /* user virtual address of load buffer */
  648.     long    buflen;        /* length of buffer to load in bytes */
  649. } sggr1_loadcx_t;
  650.  
  651. typedef struct sggr1_loadmode {    /* for SGGR1_LOADMODE */
  652.     long    cxid;        /* context who's mode is being loaded */
  653.     long    wid;        /* Window ID that context should use*/
  654. } sggr1_loadmode_t;
  655.  
  656. typedef struct sggr1_writecx {    /* for SGGR1_WRITECX */
  657.     long cxid;        /* Context writing into */
  658.     long addr;        /* Data RAM addr in words */
  659.     long count;        /* Number of words */
  660.     unsigned long *buf;    /* Buffer to write into context */
  661. } sggr1_writecx_t;
  662.  
  663. /* argument structure for SG4DCG2_READ_REG and SG4DCG2_WRITE_REG */
  664. typedef struct sgigsc_4DCG2_cgreg {
  665.     unsigned int reg;        /* register number */
  666.     unsigned char value;    /* value */
  667. } sg_4DCG2_cgreg_t;
  668.  
  669. /* Defines for CG2 register numbers */
  670. #define SG_CG_MODE_REG        0
  671. #define SG_CG_CONTROL_REG    1
  672. #define SG_CG_HORPHASE_REG    2
  673. #define SG_CG_SUBPHASE_REG    3
  674. #define SG_CG_LASTREG        SG_CG_SUBPHASE_REG
  675.  
  676. typedef sg_4DCG2_cgreg_t sg_4DVMUX_reg_t;
  677.  
  678. /* Defines for VMUX register numbers */
  679. #define SG_VMUX_CH1_DELAY_REG    0
  680. #define SG_VMUX_CH1_PHASE_REG    1
  681. #define SG_VMUX_CH2_DELAY_REG    2
  682. #define SG_VMUX_CH2_PHASE_REG    3
  683. #define SG_VMUX_CONTROL_REG    4
  684. #define SG_VMUX_LASTREG        SG_VMUX_CONTROL_REG
  685.  
  686.  
  687.  
  688. /* Arguments to SGWM_WMMODELOCK and SGWM_GLMODELOCK */
  689. #define SG_MODELOCK    0
  690. #define SG_MODEUNLOCK    1
  691.  
  692. /*
  693.  * Error codes returned by sgigsc()
  694.  */
  695. /*
  696.  * GT specific errors
  697.  */
  698. #define    E_GSC_4D80_BASE        160    /* XXX */
  699. #define E_GSC_4D80_TOOSHORT    (E_GSC_4D80_BASE+0)
  700. #define E_GSC_4D80_TOOLONG    (E_GSC_4D80_BASE+1)
  701. #define E_GSC_4D80_WAITING    (E_GSC_4D80_BASE+2)
  702. #define E_GSC_4D80_GMHUNG    (E_GSC_4D80_BASE+3)
  703. #define E_GSC_4D80_GMNOTREADY    (E_GSC_4D80_BASE+4)
  704. #define E_GSC_4D80_PICKING    (E_GSC_4D80_BASE+5)
  705. #define E_GSC_4D100_DMA_ERR    (E_GSC_4D80_BASE+6)
  706.  
  707. /*
  708.  * Kernel data structures for sgigsc()
  709.  */
  710. #ifdef _KERNEL
  711. #include "sys/sema.h"
  712.  
  713. /*
  714.  * sgigsc state structure
  715.  */
  716. typedef struct sgstate_s {
  717.     short    flags;        /* random flags */
  718.     struct    sgigsc_q *q;    /* kernel virtual addr of q */
  719.     caddr_t    uvaddr;        /* users virtual addr of q */
  720.     int    qlen;        /* length of total q memory, in bytes */
  721.     int    pages;        /* # of pages used to map q */
  722.     int    entries;    /* max # of entries in the q */
  723.     struct    proc *wman;    /* proc pointer of window manager process */
  724. #ifdef    SVR0
  725.     struct    pte *pte;    /* pte pointer to users base addr */
  726. #endif
  727. #ifdef    SVR3
  728.     sema_t    waitsema;    /* to queue clients when window mgr is slow */
  729.     int    waittmo;    /* timeout id that will wakeup waitsema wtrs */
  730.     sema_t    wmmodeq;    /* to queue the WM for the mode change lock */
  731.     sema_t    glmodeq;    /* to queue clients for the mode change lock */
  732.     int    glmodelock;    /* count of clients who have the mode lock */
  733.     lock_t    sglock;        /* spinlock to protect sgstate structure */
  734.     lock_t    qlock;        /* spinlock to protect event queue */
  735.     int    lockcount;    /* nesting count for graphics lock calls */
  736.     sema_t    gfxsema;    /* graphics semaphore - need this to image */
  737.     struct    graph_s    *owner;    /* graphics info struct of semaphore owner */
  738. #endif
  739. } sgstate_t;
  740.  
  741. extern sgstate_t sgstate;
  742.  
  743. /* bits in sgstate.flags */
  744. #define    OPEN        0x01    /* somebody has us open */
  745. #define    WMRUNNING    0x02    /* window manager is running */
  746. #define    QMEM        0x04    /* q memory is shared */
  747. #define    WANTMODELK    0x08    /* the window manager is waiting for mode lk */
  748.  
  749. /* Flag for gfx_psema */
  750.  
  751. #define NOSLEEP        0
  752. #define SLEEP        1
  753.  
  754. /*
  755.  * Definition of generic functions externalized by a graphics
  756.  * output driver for use by the rest of the kernel.
  757.  */
  758. typedef struct gr_out_s {
  759.     void    (*gr_poscursor)();    /* position the cursor */
  760.     void    (*gr_blank)();        /* blank and unblank the screen */
  761.     void    (*gr_stop)();        /* stop graphics output */
  762.     void    (*gr_ismex)();        /* set state var 'mex is running' */
  763.     struct pregion *(*gr_init)();    /* mark process as graphics process */
  764.     void    (*gr_exit)();        /* called on process exit */
  765.     int     (*gr_disp)();        /* check if process can be dispatched */
  766.     void    (*gr_glock)();        /* lock graphics */
  767.     void    (*gr_gresume)();        /* finish context switch */
  768.     int     (*gr_remap)();        /* remap graphics resources */
  769.     void    (*gr_gswtchout)();    /* context switch out of a process */
  770.     void    (*gr_killall)();    /* kill all graphics processes */
  771.     void    (*gr_setcursorpos)();    /* set saved cursor position */
  772.     void    (*gr_getcursorpos)();    /* get saved cursor position */
  773. } gr_out_t;
  774.  
  775. extern gr_out_t *gr_out_p;
  776.  
  777. /*
  778.  * Exported sgigsc functions
  779.  */
  780. extern struct proc    *gsc_window_manager();
  781. extern int        gsc_gfx_locked();
  782. extern int        gsc_glmodelock(int);
  783. extern int        gfx_psema(struct graph_s *, int);
  784. extern void        gfx_vsema(struct graph_s *);
  785. extern int        gfx_valusema();
  786. extern struct graph_s    *gfx_owner();
  787. extern void        gfx_lock();
  788. extern void        gfx_unlock();
  789.  
  790. /*
  791.  * System parameters for GT graphics
  792.  */
  793. #define SG_4D80_FIFO_VADDR    0x1000    /* FIFO address in user space */
  794. #define SG_4D80_MAXCONTEXT    16    /* number of graphics contexts in HW */
  795. #define SG_4D80_MAXFEEDBACK    0x10000    /* max feedback buffer in bytes */
  796.  
  797. /*
  798.  * Miscellaneous argument defines
  799.  */
  800. #define NOFORCE        0    /* Do not force an action */
  801. #define FORCE        1    /* Force an action */
  802.  
  803. #else    /* !_KERNEL */
  804.  
  805. extern int sgigsc(int, ...);
  806.  
  807. #endif    /* !_KERNEL */
  808.  
  809. #endif    /* !__SYS_SGIGSC_H__ */
  810.